import cv2
import easyocr as ocr


#License_Plate_Recognition

def recognize():

    #创建一个对象，支持中文和英文
    reader = ocr.Reader(['ch_sim','en'])

    #打开默认摄像头
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print("无法打开摄像头")
        exit()


    #循环读取摄像头
    while True:
        ret, frame = cap.read()
        if not ret:
            print("无法接收摄像头数据")
            break

        #识别图片中的文字,返回一个包含多个元组的列表 result
        result = reader.readtext(frame)
        #每个元组代表一个识别结果，元组包含三个元素：(识别出的文本，置信度，文本框的坐标)
        #bbox text prob


        for(bbox, text, prob) in result:
            (tl, tr, br, bl) = bbox
            #将坐标点的浮点数类型转换为整数类型，因为 OpenCV 的绘图函数要求坐标为整数。
            tl = (int(tl[0]), int(tl[1]))
            tr = (int(tr[0]), int(tr[1]))
            br = (int(br[0]), int(br[1]))
            bl = (int(bl[0]), int(bl[1]))

            #绘制矩形
            cv2.rectangle(frame, tl, br, (0, 255, 0), 2)

            #在文本框内绘制文本
            cv2.putText(frame, text, tl, cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

        #识别出的文本信息在图像帧上进行可视化展示
        #frame是存储了图像帧的变量（像素信息），text是要显示的文本信息，tl是文本框的左上角坐标，cv2.FONT_HERSHEY_SIMPLEX是字体类型，0.9是字体大小，(0, 255, 0)是字体颜色，2是字体粗细

        # 显示图像
        cv2.imshow("License Plate Recognition", frame)


        # 按下 'q' 键退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放摄像头并关闭窗口
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    recognize()